C++初级问题,又是我哦``` 谢谢``

来源:百度知道 编辑:UC知道 时间:2024/07/04 19:02:15
分数不多,谢谢大家先!
问题1:
有函数如下 f(int a) {return a++;}并有定义float f=5.88;char c="d";则以下不合法的函数调用语句是:
A f(2,3); B f(f); C f((2,3)); D f(c);
A明显错,逗号语句应该休整为C的形式.B是不是会强制的,所以是"对"? D答案,c定义的是字符串,我认为应该是char c='d';这样才对啊?难道不是么 ?```(请根据我的问好回答,谢谢,下同)
问题2:
下面的两条编译预处理命令各错在哪里?
#define MUL(int a,int b) a*b
#define MUL(int a) a*b
a*b写成(a)*(b)?这不是错误吧````
问题3:
求程序的输出结果.我的答案是124,标准答案是120,查不出来错在哪里```
int m(int a);
int m(int a,int b);
void main()
{
cout<<m(15,42);
}
int m(int a)
{
static int c=1;
return c+=a;
}
int m(inta,int b)
{
int c=2;
return m(m(c+=a+b));
}

题目1:正如你所言,A明显错误,因为参数个数不符,B选项确实会进行强制转换,C中 f((a,b)) 飞的参数是一个逗号表达式,所以,(a,b)这样的结构最后的值是b,所以参数个数还是正确的,D中字符本身就是整形,所以这样使用不会出错。
题目2:两个宏定义都出错在多了int,而不是你所说的那个错误。有没有括号都可以,但是,宏因为是简单的替换,不用考虑类型,所以不用添加类型int。
题目3:最后结果是120,至于121是怎么算出来的,我不清楚。我是这样算的:main函数首先调用两个参数的m函数,在return m(m(c+=a+b))式中,c最终结果是59,然后作为参数第一次调用第一个参数的m函数,这次调用,m传回值是60,然后紧接着调用第二次,此时因为在一个参数的m函数内部,c被定义为static,所以只会初始化一次,所以此时C已经是60了,所以C+=60自然是传回120.

哎。。。楼上真是N啊。。。